package model

import (
	"time"
)

// StockData 股票数据模型
type StockData struct {
	StockCode string    `json:"stock_code"`
	Date      time.Time `json:"date"`
	Open      float64   `json:"open"`
	High      float64   `json:"high"`
	Low       float64   `json:"low"`
	Close     float64   `json:"close"`
	Volume    int64     `json:"volume"`
	Amount    float64   `json:"amount"`
}

// FilterCondition 筛选条件
type FilterCondition struct {
	StartDate     time.Time          `json:"start_date"`     // 开始日期
	EndDate       time.Time          `json:"end_date"`       // 结束日期
	MaxDrawdown   *float64           `json:"max_drawdown"`   // 最大回撤百分比
	WindowChanges []WindowChangeRule `json:"window_changes"` // 窗口涨跌幅规则
}

// WindowChangeRule 窗口涨跌幅规则
type WindowChangeRule struct {
	Window int     `json:"window"` // 窗口大小（天数）
	Change float64 `json:"change"` // 涨跌幅百分比（正数为涨幅，负数为跌幅）
	Type   string  `json:"type"`   // 条件类型：gt（大于）、lt（小于）、ge（大于等于）、le（小于等于）
}

// StockResult 筛选结果
type StockResult struct {
	StockCode     string         `json:"stock_code"`
	MaxDrawdown   float64        `json:"max_drawdown"`   // 实际最大回撤
	WindowChanges []WindowChange `json:"window_changes"` // 各窗口实际涨跌幅
	Passed        bool           `json:"passed"`         // 是否通过筛选
}

// WindowChange 窗口涨跌幅结果
type WindowChange struct {
	Window int     `json:"window"`
	Change float64 `json:"change"` // 实际涨跌幅百分比
}
